Entity Framework (EF) Core এ, মডেল বৈধতা (validation) কনফিগার করার জন্য দুটি প্রধান পদ্ধতি রয়েছে: Data Annotations এবং Fluent API। যেখানে Data Annotations দিয়ে বৈধতা কনফিগার করা যায় মডেল ক্লাসের প্রপার্টিতে সরাসরি অটোমেটিকভাবে, সেখানে Fluent API একটি শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে, যা বিশেষ কনফিগারেশন ও কমপ্লেক্স বৈধতা নিয়ম তৈরি করতে সক্ষম।
Fluent API দিয়ে বৈধতা কনফিগারেশন করার সময় আপনি অনেক ধরনের শর্ত, সীমানা (constraints), এবং সম্পর্কের মডেল কনফিগারেশন সেট করতে পারবেন, যা ডেটাবেসের স্তরে সম্পাদিত হয় এবং কোডে আরও কাস্টমাইজডভাবে বৈধতা পরিচালনা করতে সহায়তা করে।
যেকোনো প্রপার্টি যদি Required (অবশ্যই পূর্ণাঙ্গ হতে হবে) হতে হয়, তাহলে আপনি Fluent API এর IsRequired()
মেথড ব্যবহার করে এই শর্তটি প্রয়োগ করতে পারেন।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Name)
.IsRequired(); // Name প্রপার্টি অবশ্যই পূর্ণাঙ্গ হতে হবে
}
}
এখানে, Name
প্রপার্টি Required হিসেবে কনফিগার করা হয়েছে, যার মানে এটি null
হতে পারবে না।
StringLength
বৈধতা সেট করার জন্য, Fluent API-তে HasMaxLength()
এবং HasMinLength()
মেথড ব্যবহার করা হয়। এতে আপনি প্রপার্টির সর্বোচ্চ এবং সর্বনিম্ন দৈর্ঘ্য নির্ধারণ করতে পারবেন।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Name)
.HasMaxLength(100) // Name প্রপার্টির সর্বোচ্চ দৈর্ঘ্য 100 চরিত্র
.HasMinLength(5); // Name প্রপার্টির সর্বনিম্ন দৈর্ঘ্য 5 চরিত্র
}
}
এখানে, Name
প্রপার্টির সর্বোচ্চ দৈর্ঘ্য 100 এবং সর্বনিম্ন দৈর্ঘ্য 5 চরিত্র নির্ধারণ করা হয়েছে।
Fluent API দিয়ে Range বৈধতা কনফিগার করার জন্য HasRange()
মেথড ব্যবহার করা হয়। এটি একটি প্রপার্টির মান সীমাবদ্ধ করতে সাহায্য করে, যেমন একটি বয়সের ক্ষেত্রের মধ্যে পরিসীমা নির্ধারণ করা।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Age)
.HasRange(18, 60); // Age প্রপার্টির পরিসীমা 18 থেকে 60 এর মধ্যে হবে
}
}
এখানে, Age
প্রপার্টির মান 18 থেকে 60 এর মধ্যে হতে হবে।
Fluent API এর মাধ্যমে Regular Expression (regex) কনফিগার করা যায়, যাতে একটি প্রপার্টি নির্দিষ্ট প্যাটার্নে মান গ্রহণ করে। এটি নাম, ফোন নম্বর বা ইমেইল এর মতো ফিল্ডের জন্য বিশেষভাবে উপযোগী।
public class Student
{
public int StudentId { get; set; }
public string Email { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Email)
.HasDefaultValue("")
.HasMaxLength(200)
.HasColumnType("nvarchar")
.IsRequired()
.HasComment("Student's Email Address")
.HasAnnotation("Unique", true);
}
}
এখানে email
প্রপার্টির মাধ্যমে সেট করা হয়েছে যে কোনো রেকর্ড এর email ভ্যালিড হতে হবে, regex
দিয়ে নিয়ম উল্লেখ করা হতে পারে।
common.read_more